/*
 * author: Andriamananony, Meß, Falk
 */

package start;

import plan.Plan;
import schedule.EDF;
import util.JSONParser;
import util.TimeLog;
import constraints.AllOrdersPlanned;
import constraints.DueDate;
import constraints.IConstraint;
import constraints.NoMachineOverload;
import constraints.OperationOrder;

public class Start {

	public static void main(String[] args) {
		JSONParser parser = new JSONParser("beispieldata_1.json");
		parser.print();

		TimeLog.logInfo("=============================================");
		TimeLog.logInfo("=== Plan");
		TimeLog.logInfo("=============================================");

		Plan p = new Plan();

		EDF myEDF = new EDF();
		p = myEDF.makePlan(parser);
		
//		//irgendeine Operation
//		Operation o = parser.getOrders().get(0).getAuftragProdukte().get(0).getProduktVariante().get(0).getOperation(1);
//
//		//dem Plan eine neue Belegung hinzufügen
//		Interval i = o.getRessource().getFirstUnoccupiedInterval(o.getDuration());
//		Belegung b = new Belegung(o, i);
//		p.addBelegung(b);
//
//		//ist die Ressource nun belegt?
//		System.out.println(o.getRessource().isOccupied(new Interval(1,2)));
//		System.out.println(o.getRessource().isOccupied(new Interval(0,1)));
		p.print();
		
		//Prüfen der Constraints
		IConstraint c1 = new AllOrdersPlanned();
		IConstraint c2 = new NoMachineOverload();
		IConstraint c3 = new OperationOrder();
		IConstraint c4 = new DueDate();
		
		if(c1.isMetBy(p, parser.getOrders())){
			System.out.println("Alle Aufträge eingeplant!");
		}
		if(c2.isMetBy(p,parser.getOrders())){
			System.out.println("Keine Doppelbelegung!");
		}
		if(c3.isMetBy(p, parser.getOrders())){
			System.out.println("Produktionsreihenfolge eingehalten!");
		}
		if(c4.isMetBy(p, parser.getOrders())){
			System.out.println("Alle Aufträge pünktlich abgearbeitet!");
		}
	}
}
